package LeetCodeHot100;

import java.util.HashSet;
import java.util.Set;
import java.util.Stack;

/**
 * 有效的括号
 *
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 *
 * 思路： 通过一个栈去匹配， 先进后出，当然可以对称匹配。
 *       至于括号如何对称，只有括号间的ASCII码 在 0---2 之间的间距，这个也需要待了解。 根据这两个条件就可以写代码了。
 *
 *      最后用栈是否为空判断括号是否匹配
 */
public class LeetCode20 {
    public boolean isValid(String s) {
        if(s.length()%2 != 0){
            return false;
        }
        Stack<Character> stack = new Stack<>();
        char[] ss = s.toCharArray();
        for (int i = 0; i  < ss.length ; i++) {
            if(ss[i] == '(' || ss[i] == '[' || ss[i] == '{'){
                stack.push(ss[i]);
            }else {
                if(stack.isEmpty()){ // 如果遍历过程中为空，那么证明一定有括号没有匹配
                    return false;
                }else {
                    Character l = stack.pop();
                    if(ss[i] - l <=2 && ss[i] - l > 0){
                        continue;
                    }else {
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();
    }
}
